我想尝试类似于$ _SERVER [“PATH_INFO”],但奇怪的服务器问题阻止我使用它......
在我的应用程序中,链接看起来像
www.domain.com/folder/file/variable
www.domain.com/folder/file
www.domain.com/file/variable or
www.domain.com/file/
使用.htaccess,我试图找到正确的页面,而不是重定向到index.php或类似的。
到目前为止,我有这个,这是行不通的:)。
RewriteRule ^(.+)$ /$1.php # page only
RewriteRule ^(.+)/(.+)$ /$1.php?x=$2 # page + variable
RewriteRule ^(.+)/(.+)$ /$1/$2.php # folder / page
RewriteRule ^(.+)/(.+)/(.+)$ /$1/$2.php?x=$3 # folder / page + variable
我确信我需要使用RewriteCond%{REQUEST_FILENAME} -f来检查请求是文件名还是目录......但我无法使其正常工作......
变量可以包含所有奇怪的字符 - 这就是我与点匹配的原因...也许我应该尝试将文件/文件夹名称与az匹配(因为我不认为它们将包含除az,_或 - )。
任何帮助都非常感谢,因为它现在几乎是两天的痛苦:)
答案 0 :(得分:1)
将最重要的重写规则反转到第一个。
RewriteEngine On
RewriteRule ^(.+)/(.+)/(.+)$ /$1/$2.php?x=$3 [L]
# RewriteRule to check that the file is exists here
RewriteCond %{REQUEST_URI} ^(.+)/(.+)$
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI}.php -f
RewriteRule ^(.+)/(.+)$ /$1/$2.php [L]
# If file is not exists, then check by put to the variable
RewriteRule ^(.+)/(.+)$ /$1.php?x=$2 [L]
RewriteRule ^(.+)$ /$1.php [L]
答案 1 :(得分:0)
大多数人/框架会将没有指定扩展名的所有内容传递给单个php前端控制器,然后确定要执行的操作。我认为大多数人走这条路的一个原因是因为简单的mod_rewrite是多么复杂!
答案 2 :(得分:0)
感谢@ LazyOne的提示,我能够解决这个问题。
htaccess文件现在看起来像这样:
RewriteRule ^([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+)$ /$1/$2.php?x=$3
RewriteRule ^([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+)/$ /$1/$2.php
RewriteRule ^([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+)$ /$1.php?x=$2
RewriteRule ^([-a-zA-Z0-9_]+)/$ /$1.php
所有文件夹或文件路径必须以“/”结尾,而变量则不能。这在我的框架中不是问题 - 但可能对其他人没用。