我一直在尝试过去2-3小时才能完成这项工作,但我对正则表达式的了解还不够。
我正在尝试缩短网址,因此我想将domain.com/d5Ds93X
之类的网址指向类似domain.com/view.php?s=d5Ds93X
的网址
我一直在搞乱我的.htaccess文件并立即使用:
RewriteEngine on
RewriteBase /
RewriteRule /(.*?)$ /view.php?s=$1 [L]
这种作品,它指向正确的文件,但字符串(d5Ds93X)未传递。我的view.php
文件看起来像这样(出于测试目的):
<?php
if (isset($_GET['s']) && ctype_alnum($_GET['s'])) {
echo $_GET['s'];
}
?>
访问网址时,我只是得到一个空白页面。但是,如果我在if
规则之前回显任何内容,它会显示,所以页面工作得很好。 GET的数据是否会被传递?或者我应该添加检测网址中数据的代码吗?
答案 0 :(得分:2)
像这样使用:
RewriteEngine on
RewriteBase /
# If the request is not for a valid directory
RewriteCond %{REQUEST_FILENAME} !-d
# If the request is not for a valid file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?(.+)$ view.php?s=$1 [L,QSA]
使前导斜杠可选,以便规则适用于.htaccess以及Apache配置。
还限制规则跳过文件和目录。