我正在尝试编写一个.htaccess文件来实现以下目标:
一些示例URLS(显示网址=实际位置):
以下是我目前在ABOVE管理员文件夹中的内容。它删除了php扩展,同时允许我访问任何现有文件,但它也会删除.php之后的所有内容,并且不会删除尾部斜杠。
RewriteEngine On
# Redirect php filename externally
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=302,L,QSA]
# change 302 to 301 on live for perm redirect
# Redirect php filename internally
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L,QSA]
# Rewrite Admin URLS (after specififcally looking for files)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule admin/. admin/index.php [L,QSA]
# index.php looks at $_SERVER['REQUEST_URI'] to decide what to do next
# No Directory Listings
Options -Indexes
我最关心的是能够包含相对路径的文件(.php,.inc,.css,.js),如果我能帮助它,则不必使用绝对路径。
答案 0 :(得分:0)
我通常更喜欢使用提供路由功能的框架,而不是文件夹/文件的所有重写规则的噩梦。有很多PHP框架可以轻松支持这一点,例如Silex,Symfony或Laravel,仅举几例。
在应用程序中进行路由更容易的另一个原因是它在大多数情况下从Web服务器抽象应用程序路由。例如,如果你转移到Nginx,你将不得不重构上述所有内容。
我的.htaccess可能如下所示:
<IfModule mod_rewrite.c>
RewriteEngine On
# Redirect to non-trailing slash
RewriteRule ^(.*)/$ /$1 [R=301,L]
# Block access to "hidden" directories whose names begin with a period.
RewriteRule "(^|/)\." - [F]
RewriteBase /
# Redirect requests that have no real file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php [QSA,L]
</IfModule>