当谈到正则表达式和/或RewriteEngine时,我毫无希望,所以到目前为止,我研究和尝试事情的时间都相当无效。
我尝试使用RewriteEngine来完成遵循这些规则的行为:
如果请求的网址...
domain.com/existing_file.ext
domain.com/
index.php?var=example
domain.com/existing_directory
index.php?var=REQUESTED_DIRECTORY_PATH/example
,其中REQUESTED_DIRECTORY_PATH
是domain.com
之后的所有内容(最好始终没有斜杠)domain.com/no_such_file_or_directory
index.php?var=REQUESTED_URL
,其中REQUESTED_URL
是domain.com
之后的所有内容这是我到目前为止所得到的:
# /
RewriteRule ^$ index.php?var=example [QSA,L]
# /directory_name/
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ /index.php?var=$0/example [QSA,L]
# /not_a_valid_file_or_dir/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?var=$0 [QSA,L]
对我而言似乎几乎可以做我想要的,除了当我尝试访问domain.com/existing_directory
时(带或不带斜杠)。在这种情况下,我被重定向到domain.com/existing_directory/
(带斜杠),而我希望最终到达domain.com/index.php?var=existing_directory/example
。
答案 0 :(得分:1)
感谢Bananaapple提供的有用评论,以及一些谷歌搜索,我设法完成了我想要的。
首先,我必须转为DirectorySlash off
,其次我需要从正则表达式中删除[^/]
。所以最终的相关代码看起来像这样:
DirectorySlash Off
# /
RewriteRule ^$ index.php?var=example [QSA,L]
# /directory_name/
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+)$ /index.php?var=$0/example [QSA,L]
# /not_a_valid_file_or_dir/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?var=$0 [QSA,L]
感谢您的帮助。