我有这些文件夹结构:
domain.com/pages/index.php
domain.com/pages/about/a-page.php
domain.com/pages/service/service-type/service-name.php
我希望他们像:
domain.com/index
domain.com/about/a-page
domain.com/service/service-type/service-name
这些是我到目前为止所拥有的:
#remove folder name on link e.g. https://example.com/pages/file.php will become https://example.com/file.php
RewriteEngine On
RewriteRule ^$ pages/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ pages/$1
#remove php file extension-e.g. https://example.com/file.php will become https://example.com/file
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [NC,L]
老实说,我只是从教程中复制了这个......并尝试了与我类似的问题的其他建议,这些在某种程度上是我能达到的最接近我的目标。
在看了很多 htaccess 教程后,我发现它应该是
RewriteEngine On
#remove php file extension-e.g. https://example.com/file.php will become https://example.com/file
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [NC,L]
#remove folder name on link e.g. https://example.com/pages/file.php will become https://example.com/file.php
RewriteRule ^$ pages/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ pages/$1 [NC,L]
所以我不应该忘记重写规则中的 [L] 部分,因为它不会读取不适合它的其他重写条件。