我无法使用.htaccess同时执行这两项操作。
删除index.php正在运行,但尝试添加强制小写会导致抛出500错误。我正在使用codeigniter。任何帮助表示赞赏!
这是我的.htaccess代码:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1
RewriteMap lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lc:$1} [R=301,L]
答案 0 :(得分:1)
如果你只想强制小写,建议的PHP代码不起作用。下面是正确的PHP代码。
$url = $_SERVER['REQUEST_URI'];
$pattern = '/([A-Z]+)/';
if(preg_match($pattern, $url)) {
$new_url = strtolower($url);
Header( 'HTTP/1.1 301 Moved Permanently' );
Header( 'Location: ' . $new_url );
exit;
}
// your code here
答案 1 :(得分:0)
那是因为这是不可能的,让我解释一下。
但除此之外,只能在你的Httpd.conf文件中声明RewriteMap,你可以在那里声明:
RewriteMap lc int:tolower
然后在你的.htaccess文件中使用你的变量lc,但是再次只有两个中的一个会赢,你不能同时拥有它们。
您将获得URL小写或让网站在不使用index.php的情况下工作,因为它们总是会因为每个人的性质而发生冲突。
真的是我能看到它发生的唯一方法是在php中,就像这样:
$this->load->helper('url');
$your_URL = uri_string();
preg_match_all('/[A-Z]/', $your_URL, $match) ;
$total_count = count($match [0]);
if($total_count > 0){
$new_line = strtolower($your_URL);
redirect($new_line);
}
这个我会把你的课程的主要结构放进去,我希望这能帮到你。